/**
 * @description 获取一个随机UUID
 * @return {String}
 */
function generateUUID() {
	return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
		var r = (Math.random() * 16) | 0,
			v = c === 'x' ? r : (r & 0x3) | 0x8
		return v.toString(16)
	})
}

/**
 * @description 获取二维码
 * @return {Promise}
 */
const url = 'https://cac.avic.ruanmengkeji.cn'
const uuid = generateUUID()

/**
 * @description 设置请求头
 * @param {String} type - 类型
 * @return {Object}
 */
function setHeader(type) {
	if (type == 'code' || type == 'login') return {
		'tenant-id': 1
	}
	
	return {
		'Authorization': uni.getStorageSync('info') ? 'Bearer ' + uni.getStorageSync('info').accessToken : ''
	}
}

/**
 * @description 获取二维码
 * @return {Promise}
 */
function getCode() {
	return uni.request({
		url: url + '/admin-api/cashier/auth/getCode',
		method: 'GET',
		header: setHeader('code'),
		responseType: 'arraybuffer',
		data: {
			uuid: uuid
		}
	})
}

/**
 * @description 收银台账号密码登录
 * @param {Object} param
 * @param {String} param.username - 用户名
 * @param {String} param.password - 密码
 * @param {String} param.captcha - 验证码
 * @return {Promise}
 */
function login(param) {
	return uni.request({
		url: url + '/admin-api/cashier/auth/login',
		method: 'POST',
		header: setHeader('login'),
		data: {
			uuid: uuid,
			...param
		}
	})
}

/**
 * @description 获取门店商品分类
 * @param {Object} data
 * @param {String} data.shopId - 店铺ID
 * @return {Promise}
 */
function category(data) {
	return uni.request({
		url: url + '/cashier-api/cashier/product/category/list',
		method: 'GET',
		header: setHeader(),
		data
	})
}

/**
 * @description 获得商品分页
 * @param {Object} data
 * @param {String} data.pageNo - 页码
 * @param {String} data.pageSize - 每页条数
 * @param {String} data.storeName - 商品名
 * @param {String} data.cateId - 分类ID
 * @param {String} data.shopId - 店铺id
 * @param {String} data.isShow - 上下架 1上架
 * @return {Promise}
 */
function page(data) {
	uni.showLoading()
	return uni.request({
		url: url + '/cashier-api/cashier/product/store-product/page',
		method: 'GET',
		header: setHeader(),
		data
	})
}

/**
 * @description 获得商品详情
 * @param {String} id - 商品ID
 * @return {Promise}
 */
function product(id) {
	return uni.request({
		url: url + '/cashier-api/cashierApi/get/product',
		method: 'GET',
		header: setHeader(),
		data: {
			id
		}
	})
}

/**
 * @description 获得购物车列表
 * @param {Object} data
 * @param {String} data.shopId - 店铺id
 * @param {String} data.cashierUserId - 收银员id
 * @param {String} data.orderId - 订单id
 * @return {Promise}
 */
function getCarts(data) {
	return uni.request({
		url: url + '/cashier-api/cashierApi/getCarts',
		method: 'GET',
		header: setHeader(),
		data
	})
}

/**
 * @description 添加（更新商品数量）购物车
 * @param {Object} data
 * @param {String} data.id - 
 * @param {String} data.uid - 用户ID(这里用户id传0就行，不需要获取用户)
 * @param {String} data.type - 类型
 * @param {String} data.productId - 商品ID
 * @param {String} data.shopId - 店铺id
 * @param {String} data.productAttrUnique - 商品属性唯一值
 * @param {String} data.cartNum - 商品数量
 * @param {String} data.cashierUserId - 收银用户id
 * @return {Promise}
 */
function addCart(data) {
	return uni.request({
		url: url + '/cashier-api/cashierApi/addCart',
		method: 'POST',
		header: setHeader(),
		data
	})
}

/**
 * @description 删除购物车
 * @param {String} id - 购物车id
 * @return {Promise}
 */
function delCart(id) {
	return uni.request({
		url: url + '/cashier-api/cashierApi/delCart',
		method: 'GET',
		header: setHeader(),
		data: {
			id
		}
	})
}

/**
 * @description 清空购物车
 * @param {Object} data
 * @param {String} data.shopId - 店铺id
 * @param {String} data.cashierUserId - 收银员id
 * @return {Promise}
 */
function delCartAll(data) {
	return uni.request({
		url: url + '/cashier-api/cashierApi/delCartAll',
		method: 'GET',
		header: setHeader(),
		data
	})
}

/**
 * @description 创建订单
 * @param {Object} data
 * @param {String} data.shopId - 店铺id
 * @param {String} data.mobile - 手机号
 * @param {String} data.orderType - 购买类型:takein=自取,takeout=外卖,desk=扫码点餐,due-预约（面食填takein）
 * @param {String} data.remark - 备注
 * @param {String} data.gettime - 取餐时间（默认0）
 * @param {String} data.productId - 商品ID
 * @param {String} data.spec - 规格
 * @param {String} data.number - 数量
 * @param {String} data.payType - 支付类型
 * @param {String} data.deskId - 桌面ID
 * @param {String} data.deskNumber - 桌号
 * @param {String} data.deskPeople - 就餐人数
 * @param {String} data.uid - 用户ID(这里用户id传0就行，不需要获取用户)
 * @param {String} data.cartIds - 购物车ID
 * @param {String} data.pack - 打包费
 * @return {Promise}
 */
function createOrder(data) {
	return uni.request({
		url: url + '/cashier-api/cashierApi/createOrder',
		method: 'POST',
		header: setHeader(),
		data
	})
}

/**
 * @description 支付
 * @param {Object} data
 * @param {String} data.from - 来源（固定scan）
 * @param {String} data.paytype - 支付类型alipay->支付宝支付, weixin->微信支付, yuangong->员工卡支付, huiyuan->会员卡支付
 * @param {String} data.uni - 订单ID（orderId）
 * @param {String} data.uid - 用户ID(这里用户id传0就行，不需要获取用户)
 * @param {String} data.authCode - 付款码
 * @return {Promise}
 */
function pay(data) {
	return uni.request({
		url: url + '/cashier-api/cashierApi/pay',
		method: 'POST',
		header: setHeader(),
		data
	})
}

let config = {
	url,
	getCode,
	login,
	category,
	page,
	product,
	getCarts,
	addCart,
	delCart,
	delCartAll,
	createOrder,
	pay
}

export default config